/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.Profesional;
import desarrollosoft.ghce.servicio.interfaces.IServicioProfesionales;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraVentanaCambiarContrasenia extends SelectorComposer<Window> {

    @WireVariable("servicioProfesionales")
    private IServicioProfesionales servicioProfesionales;

    private Profesional profesional;

    private static final int LONGITUD_MINIMA = 5;

    @Wire
    private Window ventana;

    @Wire
    private Textbox textboxContrasenia;

    @Wire
    private Textbox textboxContraseniaRepetida;

    @Override
    public void doAfterCompose(Window comp) throws Exception {
        hacerAntesDeDibujar();
        super.doAfterCompose(comp);
        hacerDespuesDeDibujar();
    }

    private void hacerAntesDeDibujar() {
        Execution ejecucion = Executions.getCurrent();
        profesional = (Profesional) ejecucion.getArg().get("profesional");
    }

    private void hacerDespuesDeDibujar() {
        // nada
    }

    @Listen("onClick = #botonAceptar")
    public void clickBotonAceptar() {
        String contrasenia = textboxContrasenia.getValue();
        String contraseniaRepetida = textboxContraseniaRepetida.getValue();

        if (contrasenia.isEmpty() || contraseniaRepetida.isEmpty()) {
            Messagebox.show("Asegurese de ingresar su nueva contraseña en ambos campos");
            return;
        }
        if (contrasenia.equals(contraseniaRepetida)) {
            if (contrasenia.length() < LONGITUD_MINIMA) {
                Messagebox.show("Ingrese una contraseña con una longitud de al menos " + LONGITUD_MINIMA + " caracteres");
            } else {
                // TODO OK
                try {
                    servicioProfesionales.cambiaContrasenia(profesional, contrasenia, contraseniaRepetida);
                    // aca no le cierro la sesion, el tipo sigue laburando como si nada
                } catch (Exception ex) {
                    // deberia pasar por el parser
                    Messagebox.show(ex.toString());
                    return;
                }
                Messagebox.show("Operacion correcta, ahora su contraseña es: " + contrasenia);
                ventana.detach();
            }
        } else {
            Messagebox.show("Las contraseñas no coinciden");
        }

    }

    @Listen("onClick = #botonCancelar")
    public void clickBotonCancelar() {
        ventana.detach();
    }
}
